package com.sky.service;

import com.sky.dto.MerchantDTO;
import com.sky.dto.MerchantPageQueryDTO;
import com.sky.dto.MerchantStatusDTO;
import com.sky.dto.MerchantUpdateDTO;
import com.sky.dto.MerchantLoginDTO;
import com.sky.dto.MerchantChangePasswordDTO;
import com.sky.entity.Merchant;
import com.sky.vo.MerchantAccountVO;
import com.sky.vo.MerchantOrderVO;
import com.sky.vo.MerchantLoginVO;
import com.sky.vo.MerchantRevenueVO;
import com.sky.vo.MerchantAvatarVO;
import com.sky.vo.MerchantVO;
import com.sky.vo.PageResult;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
import java.util.List;

public interface MerchantService {
    /**
     * 分页查询商家列表
     * @param merchantPageQueryDTO 分页查询条件
     * @return 商家列表及分页信息
     */
    PageResult<Merchant> pageQuery(MerchantPageQueryDTO merchantPageQueryDTO);

    /**
     * 添加商家
     * @param merchantDTO 商家信息
     * @return 添加后的商家ID
     */
    Map<String, Object> addMerchant(MerchantDTO merchantDTO);

    /**
     * 根据ID查询商家详情
     * @param id 商家ID
     * @return 商家对象
     */
    Merchant getById(Long id);

    /**
     * 更新商家信息
     * @param id 商家ID
     * @param merchantUpdateDTO 更新的商家信息
     * @return
     */
    String updateMerchant(Long id, MerchantUpdateDTO merchantUpdateDTO);

    /**
     * 删除商家
     * @param id 商家ID
     * @return 操作结果
     */
    String deleteMerchant(Long id);

    /**
     * 修改商家状态
     * @param id 商家ID
     * @param merchantStatusDTO 商家状态
     * @return
     */
    Merchant updateStatus(Long id, MerchantStatusDTO merchantStatusDTO);

    /**
     * 查询商家订单列表
     * @param params 查询条件
     * @return 订单列表及分页信息
     */
    Map<String, Object> getMerchantOrders(Map<String, Object> params);

    /**
     * 获取商家账户信息
     * @param id 商家ID
     * @return 商家账户信息
     */
    MerchantAccountVO getMerchantAccount(Long id);
    
    /**
     * 商家登录
     * @param merchantLoginDTO
     * @return
     */
    MerchantLoginVO login(MerchantLoginDTO merchantLoginDTO);
    
    /**
     * 更新商家信息（商家自身操作）
     * @param merchantId
     * @param merchantDTO
     * @return
     */
    MerchantVO updateSelfInfo(Long merchantId, MerchantDTO merchantDTO);
    
    /**
     * 修改密码
     * @param merchantId
     * @param passwordDTO
     */
    void changePassword(Long merchantId, MerchantChangePasswordDTO passwordDTO);
    
    /**
     * 上传头像
     * @param merchantId
     * @param file
     * @return
     */
    MerchantAvatarVO uploadAvatar(Long merchantId, MultipartFile file);
    
    /**
     * 暂停营业
     * @param merchantId
     * @return
     */
    MerchantVO pauseBusiness(Long merchantId);
    
    /**
     * 开始营业
     * @param merchantId
     * @return
     */
    MerchantVO resumeBusiness(Long merchantId);
    
    /**
     * 查看营业额
     * @param merchantId
     * @param startDate
     * @param endDate
     * @param type
     * @return
     */
    MerchantRevenueVO getRevenue(Long merchantId, String startDate, String endDate, String type);
    
    /**
     * 商家退出
     * @param merchantId
     */
    void logout(Long merchantId);
    
    /**
     * 获取当前商家信息
     * @param merchantId
     * @return
     */
    MerchantVO getCurrentMerchant(Long merchantId);
}